<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

    <script>
        //async await:Promise的语法糖
        //async修饰符,可以让一个普通函数返回的结果
        //都变为Promise(更重要的作用结合await)


        // async function func(){
        //     return 10
        // }
        //返回值为Promise
        // console.log(func());


        // function func1() {
        //     return new Promise(resolve=>{
        //         resolve(10)
        //     })
        // }
        // func1().then(result=>{
        //     console.log(result);
        // })

        //await修饰符，会等待promise成功，并获取它的结果
        //(有些类似同步的效果，但不是同步)
        function func1 (){
            return new Promise(resolve=>{
                setTimeout(()=>{
                    resolve(1)
                },1000)
            })
        }
        function func2 (){
            return new Promise(resolve=>{
                setTimeout(()=>{
                    resolve(2)
                },1000)
            })
        }

        function func3 (){
            return new Promise((_,reject)=>{
                setTimeout(()=>{
                    reject(3)
                },1000)
            })
        }

        //需求:异步串行 func1先执行(等待1s),成功之后执行
        // func2(等待1s),成功之后执行func3(等待1s)，再输出成功
        // function func() {
        //     func1().then(result=>{
        //         console.log(`第一个函数${result}`);
        //         return func2();
        //     }).then(result=>{
        //         console.log(`第二个函数${result}`);
        //         return func3();
        //     }).then(result=>{
        //         console.log("ok");
        //     }).catch(reason=>{
        //         console.log("no");
        //     })
        // }
        // func()

        //在函数使用await，那么当前函数一定要用async
        async function funb(){
            //只有await后面的promise实例的状态变为成功，我们把promise的值赋值给result1
            //然后才会执行下面的代码
            let result1 = await func1()
            console.log(result1);
            let result2 = await func2()
            console.log(result2);

            let result3 = await func3()
            //await只有在Promise实例是成功大道时候才会继续执行下面代码，如果
            //状态为失败，下面代码不会再执行（报错Uncaught (in promise)）
            console.log(result3);
        }
        funb()
    </script>
</body>
</html>